﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MTP
{
    public partial class ReversiForm : Form
    {
        TextBox[,] casillas;

        private PictureBox _tablero;
        private Casilla[,] _casillas;
        static int DESP = 25;
        private Reversi _juego;
        private bool _empezar;

        public ReversiForm()
        {
            InitializeComponent();
            inicializa_componentes();
        }

        private void ReversiForm_Load(object sender, EventArgs e)
        {
            _empezar = false;

            this.labelTurno.Visible = false;
            this.labelWinner.Visible = false;
            this.labelNBlancas.Visible = false;
            this.labelNNegras.Visible = false;
            this.label2.Visible = false;
            this.label1.Visible = false;

            this.pictureBox1.Visible = false;
            this.pictureBox2.Visible = false;
        }

        private void resetea_tablero()
        {
            for(int i = 0; i < 8; i++)
                for(int j = 0; j < 8; j++)
                    _casillas[i, j].Image = global::MTP_Reversi.Properties.Resources.vacia;

            labelWinner.Visible = false;
            label2.Visible = false;
        }

        private void tablero_vacio()
        {
        }

        private void inicializa_componentes()
        {

            _casillas = new Casilla[8, 8];

            int posX = DESP + 1;
            int posY = 2 * DESP + 1;

            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    _casillas[i, j] = new Casilla();
                    _casillas[i, j].I = i;
                    _casillas[i, j].J = j;

                    _casillas[i, j].Location = new System.Drawing.Point(posX, posY);
                    _casillas[i, j].Size = new System.Drawing.Size(DESP, DESP);
                    _casillas[i, j].Cursor = System.Windows.Forms.Cursors.Hand;
                    _casillas[i, j].Image = global::MTP_Reversi.Properties.Resources.vacia;
                    _casillas[i, j].Click += new System.EventHandler(this.pictureBox_Click); // Añadimos el evento.

                    posX += DESP + 1;
                    if ((j + 1) % 8 == 0)
                    {
                        posX = DESP + 1;
                        posY += DESP + 1;
                    }

                    this.Controls.Add(_casillas[i, j]);
                }
            }

            _tablero = new PictureBox();

            _tablero.Image = global::MTP_Reversi.Properties.Resources.tablero2;
            _tablero.Size = new System.Drawing.Size(209, 209);
            _tablero.Location = new System.Drawing.Point(DESP, 2 * DESP);

            this.Controls.Add(_tablero);



            resetea_tablero();


        }

        public void pintaCasilla(int i, int j, int estado)
        {
            if (estado == EstadoReversi.BLANCO)
                _casillas[i, j].Image = global::MTP_Reversi.Properties.Resources.blanca;
            else if (estado == EstadoReversi.NEGRO)
                _casillas[i, j].Image = global::MTP_Reversi.Properties.Resources.negra;
            else if (estado == EstadoReversi.VACIO)
                _casillas[i, j].Image = global::MTP_Reversi.Properties.Resources.vacia;
        }

        public void pintaGanador(int ganador)
        {
            if (ganador == EstadoReversi.BLANCO)
                labelWinner.Text = "Blancas";
            else if (ganador == EstadoReversi.NEGRO)
                labelWinner.Text = "Negras";
            else
                labelWinner.Text = "Empate";

            labelWinner.Visible = true;
            label2.Visible = true;
        }

        public void pintaEstadisticas(int blancas, int negras, int jugador)
        {
            labelTurno.Text = (jugador == EstadoReversi.BLANCO) ? "Blancas" : "Negras";
            labelNBlancas.Text = "x" + blancas;
            labelNNegras.Text = "x" + negras;
        }

        private void pictureBox_Click(object sender, EventArgs e)
        {
            if (_empezar)
            {
                Casilla casilla = (Casilla)sender;

                // Arreglar esto un poco para permitir el juego de jugadores humanos.
                _juego.jugar_humano(casilla.I, casilla.J);
                //_casillas[casilla.I, casilla.J].Image = global::MTP.Properties.Resources.blanca;
            }
        }


        private void nuevaPartidaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            NuevaForm form = new NuevaForm();
            form.ShowDialog();
            textControl.Visible = false;

            this.labelTurno.Visible = true;
            this.labelWinner.Visible = true;
            this.labelNBlancas.Visible = true;
            this.labelNNegras.Visible = true;
            this.label2.Visible = true;
            this.label1.Visible = true;

            this.pictureBox1.Visible = true;
            this.pictureBox2.Visible = true;

            ParametrosReversi parametros = form.getParametrosPartida();
            
            resetea_tablero();

            _casillas[3, 3].Image = global::MTP_Reversi.Properties.Resources.blanca;
            _casillas[4, 4].Image = global::MTP_Reversi.Properties.Resources.blanca;
            _casillas[3, 4].Image = global::MTP_Reversi.Properties.Resources.negra;
            _casillas[4, 3].Image = global::MTP_Reversi.Properties.Resources.negra;

            _juego = new Reversi(this, parametros);
            _empezar = true;
            timer.Enabled = true;
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            _juego.jugada();
        }
    }


}
